<?php

namespace app\logic\F6DataAnalysis;

use GuzzleHttp\Client;
use think\Exception;
use think\facade\Db;

class StorageBatteryDataSpecial implements DataBaseInterface
{
    protected $base_url = 'https://admin.rnbattery.com';

    protected $endpoint = '/open/product/getStoreProduct';

    protected $appId = 'rnpyl1j82mzaunnyjb';

    protected $secret = 'u26nukbrqguhi9gtygf023pktpa60bma';

    public function analysis($data, $vin, $room_info)
    {
        $proArr = [];
        // 处理蓄电池 $data[$searchType['蓄电池']
        foreach ($data as $k => $v) {
            $text = '';

            if (!isset($v['不同品牌的数据'])) {
                throw new Exception('数据结构错误-3');
            }

            // 验证是否存在 埃克塞德/EXIDE
            foreach ($v['不同品牌的数据'] as $vv) {
                $key = ''; // 品牌
                $currentPro = ''; // 型号
                foreach ($vv as $kkk => $vvv) {
                    if ($kkk === '瓦尔塔/VARTA') {
//                        记录当前的型号
                        $key = '瓦尔塔/VARTA';
                        $currentPro = $vvv['value']; // 获取当前型号名称
                        break;
                    }
                }

                // 匹配到的型号
                var_dump('匹配到的型号名称:' . $currentPro);

                // 此时查询到数据
                if ($key !== '') {
                    // $key 是 瓦尔塔 的具体型号名称。
                    // 查询基础数据ID值
                    $basicProId = Db::name('basic_products')->where('model_name', $currentPro)
                        ->value('id', 0);
                    if ($basicProId <= 0) {
                        $text = '未查询到可用数据，可联系管理员进行补充';
                    } else {
                        // 查询所有的对标数据
                        $products = Db::name('benchmark_against_products')
                            ->where('basic_pro_id', $basicProId)
                            ->select();

                        // 构建请求数据
                        $buildData = [];
                        foreach ($products as $v) {
                            $buildData[] = [
                                'brand_name' => $v['brand_name'],
                                'model_name' => $v['model_name'],
                            ];
                        }
                        $buildData = json_encode($buildData, JSON_UNESCAPED_UNICODE);

                        // 构建请求参数
                        $apiData = [
                            'app_id' => $this->appId,
                            'store_name' => $room_info['store_name'],
                            'timestamp' => time(), // 当前时间戳
                            'data' => $buildData,
                        ];

                        // 构建签名
                        $sign = function ($params, $secret) {
                            // 所有参数的 key 按照字典序（ASCII 升序）进行排序
                            ksort($params);
                            // 拼接成 a=b&c=d 形式的字符串
                            $str = urldecode(http_build_query($params));
                            return strtolower(md5(md5($str . $secret) . $secret));
                        };

                        // 追加签名参数
                        $apiData['sign'] = $sign($apiData, $this->secret);

                        // 使用 Guzzle 发送请求
                        try {
                            $http = function () use ($apiData) {
                                $ch = curl_init();
                                curl_setopt($ch, CURLOPT_URL, $this->base_url . $this->endpoint);
                                curl_setopt($ch, CURLOPT_POST, true);
                                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($apiData, JSON_UNESCAPED_UNICODE));
                                curl_setopt($ch, CURLOPT_HTTPHEADER, [
                                    'Content-Type: application/json',
                                ]);
                                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 生产环境建议开启证书验证

                                $response = curl_exec($ch);
                                $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
                                curl_close($ch);

                                if ($response === false) {
                                    throw new Exception("Curl error");
                                }

                                return json_decode($response, true);
                            };

                            // 进行接口请求
                            $result = $http();
//
                            // 接口正常
                            foreach ($result['data'] as $v) {
                                // 如果当前库存为0
                                $desc = '';
                                if ($v['stock'] <= 0) {
                                    $desc = '\n 🦯 如需外调，自提/预约免费，加急配送费20元';
                                }

                                $text .= '🔖 电池品牌：' . $v['brand_name'] . ' \n ' .
                                    '🔋 电池型号：' . $v['model_name'] . ' \n ' .
                                    '💁 铺货库存：' . $v['min_stock'] . ' \n ' .
                                    '🤖️ 当前库存：' . $v['stock'] . ' \n ' .
                                    '🏷️ 价格：' . $v['price'] . ' \n ' .
                                    '🗓️ 保质期：' . $v['warranty_period'] . '月' . ' \n ' .
                                    '⛓️‍💥 分类码：' . $v['class_code'] . $desc .
                                    ' \n\n ';
                            }

                        } catch (\Exception $e) {
                            // 错误处理
                            throw new Exception('API请求失败: ' . $e->getMessage());
                        }
                    }

                    break;
                }
            }

            // 原版本
            $proArr[$k] = $text ?? '未查询到可用数据！';
        }

        return $proArr;
    }

    // 拼接发送消息文本
    public function buildMessage($vin, $car_name, $show)
    {
        // TODO: Implement buildMessage() method.
        return '【查询结果】' . ' \n ' . '🌟' . $vin . '🌟' . ' \n\n ' . '🚘 车名：' . $car_name . ' \n\n ' . $show;
    }
}
